//
//  funcParamPointer.cpp
//  learnC++
//
//  Created by apple on 2018/5/31.
//  Copyright © 2018年 yunfan.com. All rights reserved.
//

#include "funcParamPointer.hpp"

using namespace std;

void printArray(const int *array,int length){
    
    if (!array) {
        return;
    }
    
    for (int i = 0; i < length; ++i) {
        cout << array[i] << endl;
    }
    
}

void setToNull(int *tempPtr)
{
    //传指针时，传的是指针副本，改指针不会影响外界传的指针,如果想改变指针影响外面的可以使用reference
    tempPtr = nullptr;
}

void setToNullptr(int *  &tempPtr)
{
    //传指针时，传的是指针副本，改指针不会影响外界传的指针,如果想改变指针影响外面的可以使用reference
    tempPtr = nullptr;
}

template <class T,int N>

void setNullptr(T (&ia)[N])
{

}

//当返回一个内置的数组或指针时（使用地址返回）
//当返回一个大的结构体或类时（通过引用使用返回值）

void test_func_point(){
    
    
    int array[6] = { 6, 5, 4, 3, 2, 1 };
    
    printArray(array, 6);
    
    setToNull(array);

    if (array)
        std::cout << *array << endl;
    else
        std::cout << " ptr is null";
    
    setNullptr<int, 6>(array);
    std::cout << *array << endl;
    
    int five = 5;
    int *ptr = &five;

    cout << *ptr << " = value\n";
    setToNullptr(ptr);
    cout << *ptr << " = value\n";//取空指针的值会crash
}

